#include<bits/stdc++.h>
#define int long long 
using namespace std;
inline int read(){
	int x=0,f=1;
	char ch=getchar();
	while(ch<'0'||ch>'9'){
		if(ch=='-'){
			f=-1;
		}
		ch=getchar();
	}
	while(ch>='0'&&ch<='9'){
		x=(x<<1)+(x<<3)+(ch^48);
		ch=getchar();
	}
	return x*f;
}
const int N=2e5+10,inf=1e18;
int a[N],w[N],sum[N];
struct tree{
	int val,id,add;
}t[N<<2];
void pushup(int k){
	t[k].val=max(t[k<<1].val,t[k<<1|1].val);
	t[k].id=(t[k].val==t[k<<1].val?t[k<<1].id:t[k<<1|1].id);
}
void build(int l,int r,int k){
	if(l==r){
		t[k].val=w[l];
		t[k].id=l;
		t[k].add=0;
		return ;
	}
	int mid=l+r>>1;
	build(l,mid,k<<1),build(mid+1,r,k<<1|1);
	pushup(k);
}
void pushdown(int k){
	t[k<<1].add+=t[k].add;
	t[k<<1].val+=t[k].add;
	t[k<<1|1].add+=t[k].add;
	t[k<<1|1].val+=t[k].add;
	t[k].add=0;
}
tree query(int l,int r,int k,int L,int R){
	if(L<=l&&R>=r){
		return t[k];
	}
	int mid=l+r>>1;
	pushdown(k);
	tree res;
	res.val=-inf;
	if(mid>=L){
		res=query(l,mid,k<<1,L,R);
	}
	if(mid<R){
		tree x=query(mid+1,r,k<<1|1,L,R);
		if(x.val>res.val){
			res.val=x.val;
			res.id=x.id;
		}
	}
	return res;
}
void change(int l,int r,int k,int L,int R,int x){
	if(L<=l&&R>=r){
		t[k].add+=x;
		t[k].val+=x;
		return ;
	}
	int mid=l+r>>1;
	pushdown(k);
	if(mid>=L)change(l,mid,k<<1,L,R,x);
	if(mid<R)change(mid+1,r,k<<1|1,L,R,x);
	pushup(k);
}

signed main(){
	freopen("pockets.in","r",stdin);
	freopen("pockets.out","w",stdout);
	int n=read();
	for(int i=1;i<n;i++){
		a[i]=read();
	}
	int m=read();
	if(m==1){
		a[n]=read();
		int sum1=0;
		for(int i=1;i<=n;i++){
			w[i]=a[i]-sum1;
			sum1+=a[i];
			sum[i]=sum[i-1]+a[i];
		}
//		for(int i=1;i<=n;i++)cout<<w[i]<<" ";
//		cout<<endl;
		build(1,n,1);
//		for(int i=1;i<=n;i++){
//			cout<<query(1,n,1,i,i).val<<" "<<query(1,n,1,i,i).id<<endl;
//		}
		change(1,n,1,2,n,a[1]);
		change(1,n,1,3,n,a[2]);
		int l1=1,l2=2,ans=a[1];
//		for(int i=1;i<=n;i++){
//			cout<<query(1,n,1,i,i).val<<" "<<query(1,n,1,i,i).id<<endl;
//		}
		while(l1!=n&&l2!=n){
			if(l1<l2){
				tree x=query(1,n,1,l2+1,n);
				ans+=a[x.id];
//				ans+=sum[l2-1]-sum[l1];
				l1=x.id;
				change(1,n,1,x.id+1,n,sum[x.id]-sum[l2-1]);
			}
			else {
				tree x=query(1,n,1,l1+1,n);
				ans-=a[x.id];
				ans+=sum[x.id-1]-sum[l1];
				l2=x.id;
				change(1,n,1,x.id+1,n,sum[x.id]-sum[l1-1]);
			}
//			cout<<ans<<" "<<l1<<" "<<l2<<endl;
		}
//		cout<<ans<<" "<<l1<<" "<<l2<<endl;
		if(l1==n){
			ans-=(sum[l1-1]-sum[l2]);
		}
		else {
			ans+=(sum[l2-1]-sum[l1]);
		}
		cout<<ans-sum[n]+ans;
		return 0;
	}
    return 0;
}
/*
5
1 3 4 2
1
3
*/
